//////////////////////elaborado por: Susana Taquichiri////////////////////////
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Boa.AIT.AccesoDatos.Entidades;
using Boa.AIT.AccesoDatos.Contratos;
using Boa.AIT.Negocios.Servicios;
using Boa.AIT.Negocios.Excepciones;

namespace Boa.AIT.Negocios
{
   /// <summary>
   /// Implementacion de la interface IAIT_MantenimientoPreventivoNegociosServicio, los metodos que estan definidos en el contrato IAIT_MantenimientoPreventivoNegociosServicio serán accesibles desde un contexto externo
   /// </summary>	
   public class AIT_MantenimientoPreventivoNegocios : IAIT_MantenimientoPreventivoNegociosServicio
   {
	private IAIT_MantenimientoPreventivoAccesoDatos accesoDatos;
	public AIT_MantenimientoPreventivoNegocios()
	{		
		accesoDatos = DataFactory.Current.GetAIT_MantenimientoPreventivoAccesoDatos();
	}
	
	/// <summary>
    /// Devuelve una lista de AIT_MantenimientoPreventivo's de las ocurrencias encontradas a partir del filtro
    /// </summary>    
	public List<AIT_MantenimientoPreventivo> BuscarPorFiltro(string filtro)
	{
		return accesoDatos.BuscarPorFiltro(filtro).ToList();
	}

	#region operaciones básicas
	
	/// <summary>
    /// Elimina la entidad AIT_MantenimientoPreventivo, lanzará una excepcion si la entidad guarda dependencia a otras entidades
    /// </summary>	
	public void Eliminar(AIT_MantenimientoPreventivo entidad)
	{
		try
		{
		    accesoDatos.Delete(accesoDatos.GetById(entidad.Id));
	    }
		catch(Exception ex)
		{
		   throw new AIT_MantenimientoPreventivoEliminarExcepcion("AIT_MantenimientoPreventivo");
		}
	}
	
	/// <summary>
    /// Devuelve AIT_MantenimientoPreventivo, buscada por su Id, si no existe, entonces devuelve null
    /// </summary>	
	public AIT_MantenimientoPreventivo ObtenerPorId(object Id)
	{
		return accesoDatos.GetById(Id);
	}

	/// <summary>
    /// Devuelve List<AIT_MantenimientoPreventivo>, de todas la entidades de ese tipo
    /// </summary>	
	public List<AIT_MantenimientoPreventivo> ObtenerTodas()
	{
		return accesoDatos.GetAll().ToList();
	}

	
	/// <summary>
    /// Guarda AIT_MantenimientoPreventivo, previa ejecucion satisfactoria de las reglas de negocio
    /// </summary>	
	public AIT_MantenimientoPreventivo Guardar(AIT_MantenimientoPreventivo entidad)
	{
		//Agregar aqui las reglas de negocio.......	
		if(entidad==null)
		 throw new AIT_MantenimientoPreventivoRequeridoExcepcion(); 
		
		#region Foreign Keys Values
                if(entidad.AccionesMantenimientoId_FK > 0 && entidad.AccionesMantenimiento==null)
                    entidad.AccionesMantenimiento = DataFactory.Current.GetAIT_AccionesMantenimientoAccesoDatos().GetById(entidad.AccionesMantenimientoId_FK);
                if(entidad.AsignaEmpleadoId_FK > 0 && entidad.AsignaEmpleado==null)
                    entidad.AsignaEmpleado = DataFactory.Current.GetAIT_AsignaEmpleadoAccesoDatos().GetById(entidad.AsignaEmpleadoId_FK);
                #endregion

			
		if (entidad.Id == 0)
			accesoDatos.Insert(entidad);
		else
			accesoDatos.Update(entidad);

		return entidad;
	}

	#endregion


    public List<AIT_MantenimientoPreventivo> GetPorEquipoId(int equipoId)
    {
        return accesoDatos.GetPorEquipoId(equipoId).ToList();   
    }



    public void RealizarMantenimiento(AIT_EquipoIT equipo, int MantenimientoId)
    {
        AIT_MantenimientoPreventivo mantenimiento = accesoDatos.GetAll().Where(p => p.EquipoDisponibleItem.Equipo.Id == equipo.Id && p.Id == MantenimientoId).FirstOrDefault();
        if (mantenimiento != null)
        {
            mantenimiento.FechaRealizadoMantenimiento = DateTime.Now;
            mantenimiento.RealizadoPor = Session.Global.UserInfo().Nombre;
            mantenimiento.Realizado = true;
            accesoDatos.Update(mantenimiento);
        }
    }
   }
}


